package com.acce.system.service;

import com.acce.base.exception.ApplicationException;
import com.acce.base.pojo.ArgsPojo;
import com.acce.base.pojo.ReturnCode;
import com.acce.base.pojo.ReturnPojo;

public interface IUserService {
	
	/**
	 * 注册号查重
	 * @param args registerNum/registerType
	 * @return
	 */
	ReturnPojo checkNumRepeat (ArgsPojo args);
	
	/**
	 * 注册用户
	 * @param args
	 * @return
	 * @throws ApplicationException
	 */
	ReturnPojo registerUser (ArgsPojo args) throws ApplicationException;
	
	/**
	 * 企业查重
	 * @param args atUserId/companyName
	 * @return
	 */
	ReturnPojo checkCompanyRepeat (ArgsPojo args);
	
	/**
	 * 注册企业
	 * @param args  companyName/adminName/adminPhone/adminPwd/companyType/atUserId
	 * @return
	 * @throws ApplicationException
	 */
	ReturnPojo registerCompany (ArgsPojo args) throws ApplicationException;
	
	/**
	 * 登录
	 * @param args
	 * @return
	 * @throws Exception
	 */
	ReturnPojo login(ArgsPojo args) throws ApplicationException;
	
	/**
	 * 登录
	 * @param args
	 * @return
	 * @throws Exception
	 */
	ReturnPojo autoLoginWX(ArgsPojo args) throws ApplicationException;
	
	/**
	 * openId绑定查重
	 * @param args
	 * @return
	 * @throws Exception
	 */
	ReturnPojo checkOpenIdBinding(ArgsPojo args) throws ApplicationException;
	
	/**
	 * 查询用户信息
	 * @param args atUserId
	 * @return
	 */
	ReturnPojo queryUserInfo(ArgsPojo args) throws Exception;
	
	/**
	 * 登出
	 * @param args
	 * @return
	 * @throws Exception
	 */
	ReturnPojo logout(ArgsPojo args) throws ApplicationException;
	
	/**
	 * 修改用户信息
	 * @param args atUserId/(nickName/pic/sex/realyName/companyName/rqCode����һ��)
	 * @return
	 */
	ReturnPojo resetUserInfo(ArgsPojo args) throws Exception;
	
	/**
	 * 获取公司渠道供应商
	 * @param args atUserId/(nickName/pic/sex/realyName/companyName/rqCode����һ��)
	 * @return
	 */
	ReturnPojo queryCompanyRelation(ArgsPojo args) throws Exception;
	
	/**
	 * 获取某地区渠道供应商
	 * @param args atUserId/(nickName/pic/sex/realyName/companyName/rqCode����һ��)
	 * @return
	 */
	ReturnPojo queryAllRelation(ArgsPojo args) throws Exception;
	
	/**
	 * 获取某地区渠道供应商
	 * @param args atUserId/(nickName/pic/sex/realyName/companyName/rqCode����һ��)
	 * @return
	 */
	ReturnPojo addCompanyRelation(ArgsPojo args) throws Exception;
	
	/**
	 * 获取公司所有员工
	 * @param args atUserId/(nickName/pic/sex/realyName/companyName/rqCode����һ��)
	 * @return
	 */
	ReturnPojo getCompanyAllEmployee(ArgsPojo args) throws Exception;
	
	/**
	 * 模糊查询公司
	 * @param args atUserId/(nickName/pic/sex/realyName/companyName/rqCode����һ��)
	 * @return
	 */
	ReturnPojo queryVagueCompany(ArgsPojo args) throws Exception;
	
	/**
	 * 存在公司
	 * @param args atUserId/(nickName/pic/sex/realyName/companyName/rqCode����һ��)
	 * @return
	 */
	ReturnPojo existsCompany(ArgsPojo args) throws Exception;
	
	/**
	 * 查询组织架构
	 * @param args atUserId/(nickName/pic/sex/realyName/companyName/rqCode����һ��)
	 * @return
	 */
	ReturnPojo queryOrganizaStruct(ArgsPojo args) throws Exception;
	
	/**
	 * 添加部门
	 * @param args atUserId/(nickName/pic/sex/realyName/companyName/rqCode����һ��)
	 * @return
	 */
	ReturnPojo addDepartment(ArgsPojo args) throws Exception;
	
	/**
	 * 删除部门,物理删除
	 * @param args atUserId/(nickName/pic/sex/realyName/companyName/rqCode����һ��)
	 * @return
	 */
	ReturnPojo deleteDepartment(ArgsPojo args) throws Exception;
	
	/**
	 * 部门重命名
	 * @param args atUserId/(nickName/pic/sex/realyName/companyName/rqCode����һ��)
	 * @return
	 */
	ReturnPojo renameDepartment(ArgsPojo args) throws Exception;
	
	/**
	 * 加入公司
	 * @param args atUserId/(nickName/pic/sex/realyName/companyName/rqCode)
	 * @return
	 */
	ReturnPojo joinCompany(ArgsPojo args) throws Exception;
	
	/**
	 * 加入公司审批
	 * @param args
	 * @return
	 */
	ReturnPojo joinAuditPass(ArgsPojo args) throws Exception;
	
	/**
	 * 离开公司
	 * @param args
	 * @return
	 */
	ReturnPojo exitCompany(ArgsPojo args) throws Exception;
	
	/**
	 * 查询公司信息
	 * @param args atUserId
	 * @return
	 */
	ReturnPojo queryCompanyInfo(ArgsPojo args) throws Exception;
	
	/**
	 * 修改公司信息
	 * @param args atUserId
	 * @return
	 */
	ReturnPojo resetCompanyInfo(ArgsPojo args) throws Exception;
	
	/**
	 * 添加收发货地址
	 * @param args atUserId
	 * @return
	 */
	ReturnPojo addDeliverAddress(ArgsPojo args) throws Exception;
	
	/**
	 * 修改收发货地址
	 * @param args atUserId
	 * @return
	 */
	ReturnPojo updateDeliverAddress(ArgsPojo args) throws Exception;
	
	/**
	 * 删除渠道
	 * @param args atUserId
	 * @return
	 */
	ReturnPojo deleteRelations(ArgsPojo args) throws Exception;
	
	/**
	 * 获取七牛token
	 * @param args atUserId/(nickName/pic/sex/realyName/companyName/rqCode)
	 * @return
	 */
	ReturnPojo getUpLoadToken(ArgsPojo args) throws Exception;
	
	/**
	 * 获取七牛图片
	 * @param args 
	 * @return
	 */
	ReturnPojo downLoad(ArgsPojo args) throws Exception;
	
	/**
	 * 绑定QQ
	 * @param args atUserId/qqNum
	 * @return
	 */
//	ReturnPojo bindingQQ(ArgsPojo args) throws Exception;
	
	/**
	 * 绑定微信
	 * @param args atUserId/weChatNum
	 * @return
	 */
//	ReturnPojo bindingWeChat(ArgsPojo args) throws Exception;
	
	/**
	 * 找回密码
	 * @param args registerNum/registerType/pwd
	 * @return
	 * @throws ApplicationException
	 */
	ReturnPojo findPwd(ArgsPojo args) throws ApplicationException;
	
	/**
	 * 修改密码
	 * @param args atUserId/oldpwd/pwd
	 * @return
	 * @throws ApplicationException
	 */
	ReturnPojo resetPwd(ArgsPojo args) throws ApplicationException;

	/**
	 * 获取返回码
	 * @param args 
	 * @return
	 * @throws ApplicationException
	 */
	ReturnCode getReturnCode(String code) throws ApplicationException;
//	/**
//	 * 通知֪ͨ
//	 * @param args
//	 * @return
//	 */
//	boolean notifyVerify(ArgsPojo args);

}
